#ifndef __W25QXX_H
#define __W25QXX_H



// 在正点原子的基础上修改代码接口

#include"stl_.h"
//#include"mcu_.h"
//#include"mcu_soft_spi.h"


// extern unt16 W25QXX_TYPE;	//定义W25QXX芯片型号，在c文件中定义，W25QXX_Init初始化后会被赋值。 是下面宏W25Qxx的值。

//W25X系列/Q系列芯片列表	   
//W25Q80  ID  0XEF13
//W25Q16  ID  0XEF14
//W25Q32  ID  0XEF15
//W25Q64  ID  0XEF16	
//W25Q128 ID  0XEF17	
//W25Q256 ID  0XEF18
#define W25Q80 	0XEF13 	
#define W25Q16 	0XEF14
#define W25Q32 	0XEF15
#define W25Q64 	0XEF16
#define W25Q128	0XEF17
#define W25Q256 0XEF18

#define  sFLASH_W25Q128JV_SECTOR_SIZE   4096             //扇区大小：4096字节
#define  sFLASH_W25Q128JV_BLOCK_SIZE    (4096 * 16)      //区块大小：16扇区
#define  sFLASH_W25Q128JV_FLASH_SIZE    (4096 * 4096)    //内存大小。4096个扇区。
#define  sFLASH_SPI_PAGESIZE       0x100 //每页256个字节


#define   W25Q_OK                        ((unt8)0x00)
#define   W25Q_ERROR                     ((unt8)0x01)

////////////////////////////////////////////////////////////////
#define W25X_WriteEnable			  0x06 
#define W25X_WriteDisable		      0x04 
#define W25X_ReadStatusReg1		    0x05 
#define W25X_ReadStatusReg2		    0x35 
#define W25X_ReadStatusReg3		    0x15 
#define W25X_WriteStatusReg1      0x01 
#define W25X_WriteStatusReg2      0x31 
#define W25X_WriteStatusReg3      0x11 
#define W25X_ReadData			        0x03 
#define W25X_FastReadData		      0x0B 
#define W25X_FastReadDual		      0x3B 
#define W25X_PageProgram		      0x02 
#define W25X_BlockErase			      0xD8 
#define W25X_SectorErase		      0x20 
#define W25X_ChipErase			      0xC7 
#define W25X_PowerDown			      0xB9 
#define W25X_ReleasePowerDown	    0xAB 
#define W25X_DeviceID			        0xAB 
#define W25X_ManufactDeviceID   	0x90 
#define W25X_JedecDeviceID		    0x9F 
#define W25X_Enable4ByteAddr      0xB7
#define W25X_Exit4ByteAddr        0xE9


unt8 W25QXX_Init(void);
unt16 W25QXX_ReadID(void);  	    		//读取FLASH ID
unt8 W25QXX_Get_State(void);
unt8 W25QXX_Read_SR(unt8 regno);             //读取状态寄存器 
//void W25QXX_4ByteAddr_Enable(void);     //使能4字节地址模式
void W25QXX_Write_SR(unt8 regno,unt8 sr);   //写状态寄存器
void W25QXX_Write_Enable(void);  		//写使能 
void W25QXX_Write_Disable(void);		//写保护
void W25QXX_Write_NoCheck(unt8* pBuffer,unt32 WriteAddr,unt16 NumByteToWrite);
void W25QXX_Read(unt8* pBuffer,unt32 ReadAddr,unt16 NumByteToRead);   //读取flash
//void W25QXX_Write(unt8* pBuffer,unt32 WriteAddr,unt16 NumByteToWrite);//写入flash
void W25QXX_Erase_Chip(void);    	  	//整片擦除
void W25QXX_Erase_Sector(unt32 Dst_Addr);	//扇区擦除
void W25QXX_Wait_Busy(void);           	//等待空闲
void W25QXX_PowerDown(void);        	//进入掉电模式
void W25QXX_WAKEUP(void);				//唤醒




//SPI在一页(0~65535)内写入少于256个字节的数据
//在指定地址开始写入最大256字节的数据
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大256),该数不应该超过该页的剩余字节数!!!
void W25QXX_Write_Page(unt8* pBuffer,unt32 WriteAddr,unt16 NumByteToWrite);

#endif




